package com.ruoyi.web.controller.product.mapper;

import com.ruoyi.common.core.dao.BaseMapper;
import com.ruoyi.common.entity.DO.product.ProductCategoryDO;
import com.ruoyi.common.entity.VO.product.ProductCategorySearchVO;
import com.ruoyi.common.entity.VO.product.ProductCategoryVO;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;


/**
 * 商品分类 数据层
 *
 * @author lijiantao
 */
public interface IBackProductCategoryMapper extends BaseMapper<ProductCategoryDO> {

    /**
     * 查询分类列表
     *
     * @param productCategorySearchVO
     * @return 分类列表
     */
    List<ProductCategoryVO> searchCategoryList(ProductCategorySearchVO productCategorySearchVO);

    /**
     * 删除分类
     *
     * @param categoryId 分类ID
     * @return 结果
     */
    @Update("UPDATE product_category SET is_delete = 1 WHERE id = #{categoryId}")
    int deleteCategoryById(Long categoryId);

    /**
     * 修改子分类关系
     *
     * @param childrenList 子分类列表
     * @return 结果
     */
    int updateCategoryChildren(@Param("categories") List<ProductCategoryVO> childrenList);

    /**
     * 根据分类ID查询信息
     *
     * @param categoryId 分类ID
     * @return 分类信息
     */
    ProductCategoryVO getCategoryInfoById(Long categoryId);

    /**
     * 校验分类名称是否唯一
     *
     * @param categoryName 分类名称
     * @param parentId     父分类ID
     * @return 结果
     */
    ProductCategoryVO checkCategoryNameUnique(@Param("categoryName") String categoryName, @Param("parentId") Long parentId);

    @Select("SELECT COUNT(1) FROM product_category_link pcl LEFT JOIN product p on pcl.product_id=p.id WHERE p.is_delete =0 and pcl.category_id=#{categoryId}")
    int checkCategoryExistProduct(Long categoryId);

    /**
     * 根据条件查询分类数量
     *
     * @param categorySearchVO
     * @return
     */
    int countCategory(ProductCategorySearchVO categorySearchVO);

    /**
     * 根据ID查询所有子分类
     *
     * @param id 分类ID
     * @return 分类列表
     */
    List<ProductCategoryVO> selectChildrenCategoryById(Long id);


    @Select("SELECT category_name FROM product_category WHERE id in (${categoryIds})")
    List<String> getCategoryNameList(@Param("categoryIds")String categoryIds);
}
